/*
	Written By Sanjay Giri and Pradipna Nepal
	www.pradsprojects.com
	
	Copyright (C) 2012 Prads Projects
	Please read COPYING.txt included along with this source code for more detail.
	If not included, see http://www.gnu.org/licenses/
*/

#ifndef RESTOKENTYPES_H
#define RESTOKENTYPES_H

enum TokenType {
	TOKEN_STRING,
	TOKEN_DIGIT,
	TOKEN_IDENTIFIER,
	TOKEN_KEYWORD,
	TOKEN_OPERATOR,
	TOKEN_COMPARE,
	TOKEN_SEMICOLON,
	TOKEN_OPENROUNDBRACKET,
	TOKEN_CLOSEROUNDBRACKET,
	TOKEN_PERIOD,
	TOKEN_OPENCURLYBRACKET,
	TOKEN_CLOSECURLYBRACKET,
	TOKEN_OPENSQUAREBRACKET,
	TOKEN_CLOSESQUAREBRACKET,
	TOKEN_COMMA,
	TOKEN_FUNCTION_NAME
};

enum TokenDescription {
	DESC_NONE = 100,

	//Reserved Words / Key Words
	KW_VOID,
	KW_FOR,
	KW_VAR,
	KW_CONST,
	KW_IF,
	KW_ELSE,
	KW_WHILE,
	KW_STRUCT,
	KW_SWITCH,
	KW_CASE,
	KW_DEFAULT,
	KW_BREAK,
	KW_CONTINUE,
	KW_CONSTSTRING,
	KW_GOTO,
	KW_RETURN,
	KW_MAIN,
	KW_BGC_N,
	KW_PRINT,
	KW_IMAGE,
	KW_DRAW,
	KW_CLS,
	KW_CTRL1,
	KW_VBLANK,
	KW_RANDOM,
	KW_FLIP,

	//Operators
	OPERATOR_ADD,
	OPERATOR_SUB,
	OPERATOR_MUL,
	OPERATOR_DIV,
	OPERATOR_MODULO,
	OPERATOR_BIT_AND,
	OPERATOR_BIT_OR,
	OPERATOR_BIT_XOR,
	OPERATOR_SHIFT_LEFT,
	OPERATOR_SHIFT_RIGHT,
	OPERATOR_LOG_AND,
	OPERATOR_LOG_OR,
	OPERATOR_ASSIGN,
	
	//Compare
	COMPARE_EQUALS = 0,
	COMPARE_NOT_EQUAL = 1,
	COMPARE_GREATER = 0xB,
	COMPARE_LESS = 0xD,
	COMPARE_GREATER_EQUAL = 0xC,
	COMPARE_LESS_EQUAL = 0xE
};

enum TokenLineTypes {
	TL_NONE,
	TL_ASSIGNMENT,
	TL_CONDITION,
	TL_FUNTION_DECLARE,
	TL_VAR_DECLARE,
	TL_CONST_DECLARE,
	TL_CONST_STRING_DECLARE,
	TL_INCLUDE,
	TL_CLOSE_SCOPE,
	TL_STRUCT,
	TL_STRUCT_DECLARE,
	TL_FUNCTION_CALL,
	TL_ARRAY_ASSIGNMENT,
	TL_INBUILT_FUNCTION_CALL,
	TL_IMAGE_DECLARE
};

#endif